home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1998 November / Freeware November 1998.img / dist / fw_GGxli.idb / usr / freeware / src / xli-1.16 / image.h.z / image.h
C/C++ Source or Header  |  1997-09-09  |  6KB  |  130 lines

  1. /* #ident    "@(#)x11:contrib/clients/xloadimage/image.h 6.15 93/07/23 Labtam" */
  2. /* image.h:
  3.  *
  4.  * portable image type declarations
  5.  *
  6.  * jim frost 10.02.89
  7.  *
  8.  * Copyright 1989 Jim Frost.  See included file "copyright.h" for complete
  9.  * copyright information.
  10.  */
  11.  
  12. #include "copyright.h"
  13.  
  14. /* the device independent equivalent of the X Color record */
  15. typedef struct {
  16.     unsigned long pixel;
  17.     unsigned short red, green, blue;
  18.     char flags;  /* do_red, do_green, do_blue */
  19.     char pad;
  20. } xliXColor;
  21.  
  22. typedef struct rgbmap {
  23.   unsigned int  size;       /* size of RGB map */
  24.   unsigned int  used;       /* number of colors used in RGB map */
  25.   boolean       compressed; /* image uses colormap fully */
  26.   Intensity    *red;        /* color values in X style */
  27.   Intensity    *green;
  28.   Intensity    *blue;
  29. } RGBMap;
  30.  
  31. /* image structure
  32.  */
  33.  
  34. typedef struct {
  35.   char         *title;  /* name of image */
  36.   unsigned int  type;   /* type of image */
  37.   RGBMap        rgb;    /* RGB map of image if IRGB type */
  38.   unsigned int  width;  /* width of image in pixels */
  39.   unsigned int  height; /* height of image in pixels */
  40.   unsigned int  depth;  /* depth of image in bits if IRGB type */
  41.   unsigned int  pixlen; /* length of pixel if IRGB type */
  42.   byte         *data;   /* data rounded to full byte for each row */
  43.   float        gamma;    /* gamma of display the image is adjusted for */
  44. } Image;
  45.  
  46. #define IBITMAP 0 /* image is a bitmap */
  47. #define IRGB    1 /* image is RGB */
  48. #define ITRUE   2 /* image is true color */
  49.  
  50. #define BITMAPP(IMAGE) ((IMAGE)->type == IBITMAP)
  51. #define RGBP(IMAGE)    ((IMAGE)->type == IRGB)
  52. #define TRUEP(IMAGE)   ((IMAGE)->type == ITRUE)
  53.  
  54. #define TRUE_RED(PIXVAL)   (((unsigned long)((PIXVAL) & 0xff0000)) >> 16)
  55. #define TRUE_GREEN(PIXVAL) (((unsigned long)((PIXVAL) & 0xff00)) >> 8)
  56. #define TRUE_BLUE(PIXVAL)   ((unsigned long)((PIXVAL) & 0xff))
  57. #define RGB_TO_TRUE(R,G,B) \
  58.   ((((unsigned long)((R) & 0xff00)) << 8) | ((G) & 0xff00) | (((unsigned short)(B)) >> 8))
  59.  
  60. #define depthToColors(n) DepthToColorsTable[((n) < 32 ? (n) : 32)]
  61.  
  62. /*
  63.  * this returns the (approximate) intensity of an RGB triple
  64.  */
  65.  
  66. #define colorIntensity(R,G,B) \
  67.   (RedIntensity[((unsigned short)(R)) >> 8] + GreenIntensity[((unsigned short)(G)) >> 8] + BlueIntensity[((unsigned short)(B)) >> 8])
  68.  
  69. extern unsigned short RedIntensity[];
  70. extern unsigned short GreenIntensity[];
  71. extern unsigned short BlueIntensity[];
  72.  
  73. /*
  74.  * Architecture independent memory to value conversions.
  75.  * Note the "Normal" internal format is big endian.
  76.  */
  77.  
  78. #define memToVal(PTR,LEN) (                                   \
  79. (LEN) == 1 ? (unsigned long)(                 *( (byte *)(PTR))         ) :    \
  80. (LEN) == 2 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<< 8)      \
  81.                           + (                 *(((byte *)(PTR))+1)      ) :    \
  82. (LEN) == 3 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<<16)      \
  83.                           + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8)      \
  84.                           + (                 *(((byte *)(PTR))+2)      ) :    \
  85.              (unsigned long)(((unsigned long)(*( (byte *)(PTR))   ))<<24)      \
  86.                           + (((unsigned long)(*(((byte *)(PTR))+1)))<<16)      \
  87.                           + (((unsigned long)(*(((byte *)(PTR))+2)))<< 8)      \
  88.                           + (                 *(((byte *)(PTR))+3)      ) )
  89.  
  90. #define valToMem(VAL,PTR,LEN)  (                                          \
  91. (LEN) == 1 ? (*( (byte *)(PTR)   ) = ( VAL     ) ) : \
  92. (LEN) == 2 ? (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>> 8),        \
  93.               *(((byte *)(PTR))+1) = ( VAL     ) ) : \
  94. (LEN) == 3 ? (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>>16),        \
  95.               *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8),        \
  96.               *(((byte *)(PTR))+2) = ( VAL     ) ) : \
  97.              (*( (byte *)(PTR)   ) = (((unsigned long)(VAL))>>24),        \
  98.               *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>>16),        \
  99.               *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>> 8),        \
  100.               *(((byte *)(PTR))+3) = ( VAL     ) ))
  101.  
  102. #define memToValLSB(PTR,LEN) (                                \
  103. (LEN) == 1 ? (unsigned long)(                 *( (byte *)(PTR))         ) :    \
  104. (LEN) == 2 ? (unsigned long)(                 *( (byte *)(PTR))         )      \
  105.                           + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8) :    \
  106. (LEN) == 3 ? (unsigned long)(                 *( (byte *)(PTR))         )      \
  107.                           + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8)      \
  108.                           + (((unsigned long)(*(((byte *)(PTR))+2)))<<16) :    \
  109.              (unsigned long)(                 *( (byte *)(PTR))         )      \
  110.                           + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8)      \
  111.                           + (((unsigned long)(*(((byte *)(PTR))+2)))<<16)      \
  112.                           + (((unsigned long)(*(((byte *)(PTR))+3)))<<24) )
  113.  
  114.  
  115. /* this is provided for orthagonality
  116.  */
  117.  
  118. #define valToMemLSB(VAL,PTR,LEN) (                                        \
  119. (LEN) == 1 ? (*( (byte *)(PTR)   ) = ( VAL     ) ) : \
  120. (LEN) == 2 ? (*( (byte *)(PTR)   ) = ( VAL     ),                         \
  121.               *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8) ) : \
  122. (LEN) == 3 ? (*( (byte *)(PTR)   ) = ( VAL     ),                         \
  123.               *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8),                         \
  124.               *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>>16) ) : \
  125.              (*( (byte *)(PTR)   ) = ( VAL     ),                         \
  126.               *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8),                         \
  127.               *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>>16),                         \
  128.               *(((byte *)(PTR))+3) = (((unsigned long)(VAL))>>24)) )
  129.  
  130.